fn build_requirements(&mut self, pkg: &'a Package, target: &'a Target,
req: PlatformRequirement,
- visiting: &mut HashSet<&'a PackageId>) {
- if !visiting.insert(pkg.get_package_id()) { return }
+ visiting: &mut HashSet<(&'a PackageId, &'a str)>) {
let key = (pkg.get_package_id(), target.get_name());
+ if !visiting.insert(key) { return }
let req = if target.get_profile().is_for_host() {PlatformPlugin} else {req};
match self.requirements.entry(key) {
Occupied(mut entry) => { *entry.get_mut() = entry.get().combine(req); }
self.build_requirements(pkg, dep, req, visiting);
}
- visiting.remove(&pkg.get_package_id());
+ match pkg.get_targets().iter().find(|t| t.get_profile().is_custom_build()) {
+ Some(custom_build) => {
+ self.build_requirements(pkg, custom_build, PlatformPlugin,
+ visiting);
+ }
+ None => {}
+ }
+
+ visiting.remove(&key);
}
pub fn get_requirement(&self, pkg: &'a Package,
", compiling = COMPILING, running = RUNNING, target = target, host = host,
dir = p.root().display(), sep = path::SEP).as_slice()));
})
+
+test!(build_deps_for_the_right_arch {
+ if disabled() { return }
+
+ let p = project("foo")
+ .file("Cargo.toml", r#"
+ [package]
+ name = "foo"
+ version = "0.0.0"
+ authors = []
+
+ [dependencies.d2]
+ path = "d2"
+ "#)
+ .file("src/main.rs", "extern crate d2; fn main() {}")
+ .file("d1/Cargo.toml", r#"
+ [package]
+ name = "d1"
+ version = "0.0.0"
+ authors = []
+ "#)
+ .file("d1/src/lib.rs", "
+ pub fn d1() {}
+ ")
+ .file("d2/Cargo.toml", r#"
+ [package]
+ name = "d2"
+ version = "0.0.0"
+ authors = []
+ build = "build.rs"
+
+ [build-dependencies.d1]
+ path = "../d1"
+ "#)
+ .file("d2/build.rs", "extern crate d1; fn main() {}")
+ .file("d2/src/lib.rs", "");
+
+ let target = alternate();
+ assert_that(p.cargo_process("build").arg("--target").arg(&target).arg("-v"),
+ execs().with_status(0));
+})